﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Linq;
using System.Text;
using wpfArVideo;

namespace ModuloPartidas
{
    public class Partida
    {
        /*
        private String nombre;
        private int nJugadores;
        private String tipo;
        private String organizador;
        */ 
    
        //Constructor
        public Partida()
        {}

        public string CrearPartida(string nombre, int nj, string t, string org)
        {
            string error = null;
            ARBDDataContext bd = new ARBDDataContext();
            /** comprobamos que no hay ninguna partida con ese nombre
             * en la base de datos 
             **/
            var q = from p in bd.partidas
                    where p.nombre == nombre
                    select p;
            if (q.FirstOrDefault() != null)
            {
                /** la partida existe en la base de datos 
                 * o hay otra con un nombre simular 
                 **/
                error = ("La partida ya existe");
            }
            else if (nombre.Contains(" "))
            {
                error = "No se permiten espacios en blanco en el nombre de partida";
            }
            else if (nombre == "")
            {
                error = "Nombre de partida vacia";
            }
            else if (nj <= 0)
            {
                error = "Numero de jugadores no válido";
            }
            else if (t == null)
            {
                error = "Tipo de partida vacio";
            }
            else
            {
                /** una vez fuera del if significa que 
                 * el nombre de partida es unico y es nueva partida
                 **/
                partida par = new partida();
                par.nombre = nombre;
                par.num_jugadores = nj;
                par.organizador = org;
                par.tipo = t;
                bd.partidas.InsertOnSubmit(par);
                bd.SubmitChanges();
     
            }
            return error;

            
        }

        public void borrarPartida(string p)
        {
            ARBDDataContext bd = new ARBDDataContext();
            var q = from t in bd.participacions
                    where t.Id_partida == p
                    select t;
            int jugadores, terminado;
            jugadores = 0;
            terminado = 0;
            foreach (participacion k in q)
            {
                jugadores++;
                if (k.terminado == "Si")
                {
                    terminado++;
                }
            }
            if (jugadores == terminado)
            {
                var q2 = from t2 in bd.partidas
                         where t2.nombre == p
                         select t2;
                bd.participacions.DeleteAllOnSubmit(q);
                bd.partidas.DeleteAllOnSubmit(q2);
                bd.SubmitChanges();
            }
        }
        
        public List<JugadorRanking> ConsultarRanking(string np)
        {
            //Se llamara a una funcion que devolverá la lista de los jugadores (llamada a la base de datos)
            
            ARBDDataContext bd = new ARBDDataContext();
            List<JugadorRanking> lj = new List<JugadorRanking>();
            var q = from p in bd.participacions
                     where p.Id_partida == np
                     orderby p.puntuacion
                     select p;
            List<participacion> l = q.ToList<participacion>();
            foreach (participacion i in l)
            {
                JugadorRanking aux = new JugadorRanking(i.Usuario, i.puntuacion.ToString());
                lj.Add(aux);
            }

            return lj;
        }
    }
}
